// services/api.js - API服务封装
import axios from 'axios'

// 创建axios实例
const apiClient = axios.create({
  // 使用相对路径，由代理处理转发
  baseURL: '/api',
  // 请求超时
  timeout: 10000,
  // 请求头 不设置，让浏览器自行处理，避免影响附件上传
  // headers: {
  //   'Content-Type': 'application/json',
  //   'Accept': 'application/json'
  // }
})

// 请求拦截器 - 添加认证令牌
apiClient.interceptors.request.use( // 请求拦截器 用于添加认证令牌
  // 在请求发送之前做一些处理
  config => {
    const token = localStorage.getItem('auth_token')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  error => {
    console.log("进入了错误处理 api.js")
    return Promise.reject(error)
  }
)

// 响应拦截器 - 处理常见错误
apiClient.interceptors.response.use(
  response => response,
  error => {
    // 处理401未授权错误
    if (error.response && error.response.status === 401) {
      // 清除本地存储的令牌
      localStorage.removeItem('auth_token')
      // 这里可以添加重定向到登录页面的逻辑
    }
    return Promise.reject(error)
  }
)

// API方法
export default {
  // ====== 题目相关 API ======

  // 题目类型管理
  getQuestionTypes() {
    return apiClient.get('/question-types')
  },
  createQuestionType(data) {
    return apiClient.post('/question-types', data)
  },

  // 更新题目类型
  updateQuestionType(id, data) {
    return apiClient.put(`/question-types/${id}`, data)
  },

  // 删除题目类型（物理删除）
  deleteQuestionType(id) {
    return apiClient.delete(`/question-types/${id}`)
  },
  
  // 获取单个题目类型
  getQuestionTypeById(id) {
    return apiClient.get(`/question-types/${id}`)
  },
  
  // 搜索题目类型
  searchQuestionTypes(q) {
    return apiClient.get('/question-types/search', { params: { q } })
  },

  // 获取题目列表
  getQuestions(params) {
    return apiClient.get('/questions', { params })
  },
  
  // 获取单个题目
  getQuestion(id) {
    return apiClient.get(`/questions/${id}`)
  },
  
  // 创建题目（支持配置参数）
  createQuestion(data) {
    return apiClient.post('/questions', data)
  },
  
  // 更新题目
  updateQuestion(id, data) {
    return apiClient.put(`/questions/${id}`, data)
  },
  
  // 删除题目
  deleteQuestion(id) {
    return apiClient.delete(`/questions/${id}`)
  },
  
  // ====== 用户认证相关 API ======
  
  // 用户登录
  login(credentials) {
    return apiClient.post('/auth/login', credentials)
  },
  
  // 用户注册
  register(userData) {
    return apiClient.post('/auth/register', userData)
  },
  
  // 获取当前用户信息
  getCurrentUser() {
    return apiClient.get('/auth/me')
  },
  
  // ====== 知识树相关 API ======
  
  // 获取整棵知识树
  getKnowledgeTree() {
    return apiClient.get('/knowledge-tree')
  },
  
  // 获取单个节点及其子节点
  getKnowledgeNode(nodeId) {
    return apiClient.get(`/knowledge-tree/${nodeId}`)
  },
  
  // 创建节点
  createKnowledgeNode(data) {
    return apiClient.post('/knowledge-tree', data)
  },
  
  // 更新节点
  updateKnowledgeNode(nodeId, data) {
    return apiClient.put(`/knowledge-tree/${nodeId}`, data)
  },
  
  /**
   * 移动知识树节点
   * @param {string} nodeId - 要移动的节点ID (路径参数)
   * @param {string} dropNodeId - 目标节点ID (请求体参数)
   * @param {string} dropType - 放置类型(inner/before/after) (请求体参数)
   * @returns {Promise} Axios响应
   * 作用：修改节点的父节点或排序顺序
   */
  moveKnowledgeNode(nodeId, { dropNodeId, dropType }) {
    // console.log('api.js moveKnowledgeNode 调用:', nodeId, { dropNodeId, dropType })
    return apiClient.patch(`/knowledge-tree/${nodeId}/move`, { 
      dropNodeId,
      dropType 
    })
  },
  
  // 删除节点
  deleteKnowledgeNode(nodeId) {
    return apiClient.delete(`/knowledge-tree/${nodeId}`)
  },

  // ====== 题目来源管理 ======
  
  // 创建题目来源类型和内容
  createQuestionSource(data) {
    // 转换参数名 content -> sourceContent
    const requestData = {
      sourceType: data.sourceType,
      sourceContent: data.sourceContent
    }
    // 这里相比于下面的代码多了validateStatus
    // return apiClient.post('/question-sources', requestData, {
    //  validateStatus: status => status === 201 || status === 400 || status === 409
    //})
     return apiClient.post('/question-sources', requestData)
  },

  // 获取单个题目来源文档
  getQuestionSource(id) {
    return apiClient.get(`/question-sources/${id}`)
  },

  // 更新题目来源文档的任意字段
  updateQuestionSource(id, data) {
    return apiClient.patch(`/question-sources/${id}`, data)
  },

  // 删除单个题目来源文档
  deleteQuestionSource(id) {
    return apiClient.delete(`/question-sources/${id}`)
  },

  // 获取级联选择器数据
  getCascaderOptions() {
    return apiClient.get('/question-sources/cascader-options')
  },

  // 获取所有题目来源类型
  getAllSourceTypes() {
    return apiClient.get('/question-sources/source-types')
  },

  // 批量重命名分类
  batchRenameSourceType(oldSourceType, newSourceType) {
    return apiClient.patch(`/question-sources?oldSourceType=${oldSourceType}`, { newSourceType })
  },

  // 批量删除整个分类
  batchDeleteSourceType(sourceType) {
    return apiClient.delete(`/question-sources?sourceType=${sourceType}`)
  },

  // 获取来源类型的内容列表
  getSourceContents(sourceType) {
    return apiClient.get(`/question-sources/${sourceType}/source-contents`)
  },

  // 获取分类结构的题目来源数据
  getMapSource() {
    return apiClient.get('/question-sources/map-source')
  },

  // ====== 表单模板相关 API ======
  
  // 表单模板管理
  getFormTemplates(params) {
    return apiClient.get('/form-templates', { params })
  },
  
  // 获取单个表单模板
  getFormTemplate(id) {
    return apiClient.get(`/form-templates/${id}`)
  },
  
  // 创建表单模板
  createFormTemplate(data) {
    return apiClient.post('/form-templates', data)
  },
  
  // 更新表单模板
  updateFormTemplate(id, data) {
    return apiClient.put(`/form-templates/${id}`, data)
  },
  
  // 删除表单模板
  deleteFormTemplate(id) {
    return apiClient.delete(`/form-templates/${id}`)
  },
  
  // 搜索表单模板
  searchFormTemplates(q) {
    return apiClient.get('/form-templates/search', { params: { q } })
  },
  
  // ====== 表单模板字段相关 API ======
  
  // 获取表单模板字段列表
  getFormTemplateFields(templateId, params) {
    return apiClient.get(`/form-templates/${templateId}/fields`, { params })
  },
  
  // 获取单个表单模板字段
  getFormTemplateField(templateId, fieldId) {
    return apiClient.get(`/form-templates/${templateId}/fields/${fieldId}`)
  },
  
  // 创建表单模板字段
  createFormTemplateField(templateId, data) {
    return apiClient.post(`/form-templates/${templateId}/fields`, data)
  },
  
  // 更新表单模板字段
  updateFormTemplateField(templateId, fieldId, data) {
    return apiClient.put(`/form-templates/${templateId}/fields/${fieldId}`, data)
  },
  
  // 删除表单模板字段
  deleteFormTemplateField(templateId, fieldId) {
    return apiClient.delete(`/form-templates/${templateId}/fields/${fieldId}`)
  },

  // ====== 测试方法 ======
  
  // 测试API连接
  testConnection() {
    return apiClient.get('/test') // 假设后端有一个/test端点用于测试
  }
}
